var subPage = {};	//用于弹窗，如增删改查页面
var popup = {};		//用于弹层

$(function() {
	//去掉加载页面时，遮挡的div
	$("body").css("visibility", "visible");
	
	//回车刷新
	if(!/login$/.test(location.href) && !/main/.test(location.href) && window.datagrid && $(".pagination-num:focus").length == 0) {
		document.onkeydown = function() {
			if(event.keyCode==13) {
				if(window.zcurdSearch) {
					zcurdSearch();
				}
				return true;                               
			}
		}
	}
	
	//列表页面，如果没有搜索条件，则隐藏搜索按钮
	if($("#tb .wrap_search .search_item").size() == 0) {
		$("#tb #searchBtnWrap").hide();
	}
});

function log(obj) {
	if(console) {
		console.log(obj);
	}
}

/**
 * 显示消息
 */
function showMsg(msg) {
	top.window.$.messager.show({
        title: '消息',
        msg:'<div style="padding-top: 10px;">' + msg||"消息内容！" + '</div>',
        timeout: 3000,
        showType: 'slide'
    });
}

/**
 * 显示警告消息
 */
function showWarnMsg(msg) {
	top.window.$.messager.show({
        title: '错误消息',
        msg: '<div class="messager-icon messager-warning"></div><div style="padding-top: 10px;">' + (msg || "消息内容！") + "</div>",
        timeout: 3000,
        showType: 'slide'
    });
}

/**
 * 显示警告消息
 */
function showErrorMsg(msg) {
	top.window.$.messager.alert('错误消息', msg,"warning");
}

/**
 * 确认消息
 */
function confirmMsg(msg, successFunc){
	top.window.$.messager.confirm('请确认', '<div style="padding-top: 10px;">' + (msg || 'Are you confirm this?') + "</div>", function(r){
		if(r) {
			if($.isFunction(successFunc)) {
				successFunc();
			}
		}
    });
}

/**
 * 打开弹出窗
 * @param title		标题
 * @param url		iframe地址
 * @param options	可选参数
 */
function openWindow(title, url, options) {
	options = options || {};
	if(options.size && options.size.indexOf("x") >= 0) {
		options.width = options.size.split("x")[0];
		options.height = options.size.split("x")[1];
	}
	$("#dialogWindow iframe").attr("src", url);
    $("#dialogWindow").window({
    	closed:false,
    	modal:true,
    	title: title || '增加',
    	width: options.width || 700,
    	height: options.height || 450,
    	onClose: function() {
    		$("#dialogWindow iframe").removeAttr("src");
    		//关闭popup
    		try {
    			$("#popupWindow").window("close");
    		} catch(err) {
    			//没有弹层
    		}
    		
    	}
    });
    $("#dialogWindow").window("center");
}

function openWindow_view(title, url, options, callBackfun) {
	options = options || {};
	if(options.size && options.size.indexOf("x") >= 0) {
		options.width = options.size.split("x")[0];
		options.height = options.size.split("x")[1];
	}
	$("#dialogWindow_view iframe").attr("src", url);
    $("#dialogWindow_view").window({
    	closed:false,
    	modal:true,
    	title: title || '增加',
    	width: options.width || 700,
    	height: options.height || 450,
    	onClose: function() {
    		$("#dialogWindow_view iframe").removeAttr("src");
    		if(callBackfun)
    		{
    			callBackfun();
    		}
    		//关闭popup
    		try {
    			$("#popupWindow_view").window("close");
    			
    		} catch(err) {
    			//没有弹层
    		}
    		
    	}
    });
    $("#dialogWindow_view").window("center");
}

function openWindow_send(title, url, options, callBackfun) {
	options = options || {};
	if(options.size && options.size.indexOf("x") >= 0) {
		options.width = options.size.split("x")[0];
		options.height = options.size.split("x")[1];
	}
	$("#dialogWindow_send iframe").attr("src", url);
    $("#dialogWindow_send").window({
    	closed:false,
    	modal:true,
    	title: title || '增加',
    	width: options.width || 700,
    	height: options.height || 450,
    	onClose: function() {
    		$("#dialogWindow_send iframe").removeAttr("src");
    		if(callBackfun)
    		{
    			callBackfun();
    		}
    		//关闭popup
    		try {
    			$("#popupWindow_send").window("close");
    			
    		} catch(err) {
    			//没有弹层
    		}
    		
    	}
    });
    $("#dialogWindow_send").window("center");
}

/**
 * 打开一个弹层，用于选择一些信息（如城市等）
 * @param ipt	需要弹层的input或其它元素
 * @param title	弹层标题
 * @param url	页面ulr
 * @param options	其它参数（参考easyui-window）
 */
function openPopup(ipt, title, url, options) {
	ipt = $(ipt);
	popup.ipt = ipt;
	var os1 = $("#dialogWindow").offset();
	var os2 = ipt.offset();
	
	
	if(!url || popup.currUrl != url) {
		$("#popupWindow iframe").attr("src", url);
	}
	if(!options) {
		options = {};
	}
	options.title = title || "popup";
	options.top = os1.top + os2.top + ipt.outerHeight();
	options.left = os1.left + os2.left;
	options.onClose = function() {
		//回调关闭事件
		if(top.window.popup.close) {
			top.window.popup.close();
		}
	}
	//回调显示事件
	if(top.window.popup.show) {
		top.window.popup.show();
	}
    $("#popupWindow").window(options);
    popup.currUrl = url;
}

/**
 * 关闭弹层
 **/
function closePopup() {
	$("#popupWindow").window("close");
}

/**
 * 关闭弹出窗口
 */
function closeWindow() {
    $("#dialogWindow").window("close");
}

function closeWindow_view() {
	$("#dialogWindow_view").window("close");
}

function closeWindow_send() {
	$("#dialogWindow_send").window("close");
}

/**
 * 刷新页面
 */
function flushPage() {
	location.replace(location);
}

/**
 * 根据对象属性从集合中获得对象
 * @param list
 * @param attrName
 * @param attrValue
 * @returns	匹配到的第一个对象
 */
function getObjFromList(list, attrName, attrValue) {
	if($.isArray(list)) {
		for (var i = 0; i < list.length; i++) {
			var item = list[i];
			if(item[attrName] == attrValue) {
				return item;
			}
		}
	}
	return null;
}

function getInputValue(inputName) {
	var inputObj = $(":input[name='" + inputName + "']");
	var result = "";
	if(inputObj.attr("type") == "file") {
		result = $("#" + inputName).attr("data");	//如果文件，从文件的显示框架读取
	}else {
		inputObj.each(function(i, item) {
			result += "," + $(item).val();
		});
	}
	return result.replace(",", "");
}

/**
 * 如：当前页面为stockHistoryLog/listPage，则getCurrUrl(addPage)返回stockHistoryLog/addPage
 */
function getCurrUrl(method) {
	return window.location.pathname.replace(/\w+$/, method);
}

/**
 * 使combobox变为多选
 * @param inputIds 单个id或者数组
 */
function changeComboboxToMult(inputIds) {
	if(!$.isArray(inputIds)) {
		inputIds = [inputIds];
	}
	$.each(inputIds, function(i, item) {
		var iptObj = $("#" + inputIds);
		var data = iptObj. combobox("getData").splice(0, 1);
		iptObj. combobox({multiple:true});
	});
}


//扩展easyui-datagrid的edit模式
$.extend($.fn.datagrid.defaults.editors, {
	//支持checkbox
    checkbox: {
        init: function(container, options){
        	var align = "center";
        	if(options && options.align) {
        		align = options.align;
        	}
        	container.attr("align", align);
            var input = $('<input type="checkbox" class="datagrid-editable-checkbox">').appendTo(container);
            return input;
        },
        destroy: function(target){
            $(target).remove();
        },
        getValue: function(target){
            return $(target).is(":checked") ? 1 : 0;
        },
        setValue: function(target, value){
        	if(value == 1) {
        		$(target).click();
        	}
        },
        resize: function(target, width){
            //$(target)._outerWidth(width);
        }
    }
});

//全局ajax事件处理
$(window).ajaxError(function(event,xhr,options,exc){
	//showWarnMsg("操作失败，服务器出现错误！");
	var errInfo = "Ajax请求失败，请将如下内容【复制】并反馈给开发商：";
	errInfo += "<br/>Request状态码："+xhr.readyState;
	errInfo += "<br/>Http状态码："+xhr.status;
	errInfo += "<br/>状态信息："+xhr.statusText;
	errInfo += "<br/>JS错误："+exc;
	errInfo += "<br/>响应文本："+xhr.responseText;
	showErrorMsg(errInfo);
});
$(window).ajaxSuccess(function(evt, request, settings){
	var s = request.responseText;
	if(s && s.indexOf('{"result":"fail"') != -1) {
		showWarnMsg(s.substring(24, s.length - 2));
	}
});


//extend the 'equals' rule
$.extend($.fn.validatebox.defaults.rules, {
    equals: {
        validator: function(value,param){
            return value == $(param[0]).val();
        },
        message: '两次输入不一致.'
    }
});

/**
 * 上传文件，用于easyui-filebox异步上传
 * @param fileIptId 文件输入框id
 */
function uploadFile(fileIptId) {
	if(window.FormData) {
		var fileObj = $(":input[name='" + fileIptId + "']");
		var files = fileObj.get(0).files;
		var imgObj = $("#" + fileIptId + "Img");
		
		$("#" + fileIptId).attr("data", "");
		if(files.length > 0) {
			if(files[0].size / 1024 / 1025 > 5) {
				showWarnMsg("上传图片不能大于5M");
				return;
			}
			var formData = new FormData();
			// 建立一个upload表单项，值为上传的文件
			formData.append('upload', fileObj.get(0).files[0]);
			var xhr = new XMLHttpRequest();
			xhr.open('POST', basePath + "/common/uploadFile");
			// 定义上传完成后的回调函数
			xhr.onload = function () {
				if (xhr.status === 200) {
					$("#" + fileIptId).attr("data", xhr.response);
					//显示图片
					imgObj.attr("src", basePath + xhr.response).parent().show();
				} else {
					showWarnMsg("上传图片失败")
				}
			}	
			xhr.send(formData);
		}else {
			//隐藏图片
			imgObj.attr("src", "").parent().hide();
		}
	}else {
		alert("该浏览器不支持文件上传，请用chrome或firefox浏览器~");
	}
}

/**
 * 格式化图片（用于datagrid）
 * @param url
 */
function formatterDgImage(url) {
	return url ? "<img class='dg_img' src='" + basePath + "/" + url + "' />" : "";
}



// ----------------------EasyUI组件添加'清除'按钮及功能Begin-----------------------------------------------------------  
/*
 * 为 EasyUI 中一些常用组件添加'清除'按钮及功能，提升操作体验。共计6个，用法如下，同时可参见 one_add.html 中的使用方式。
	（1）addClear4TextBox("#name",nameChangeDo);		//文本框,同时传入了回调函数
	（2）addClear4Combobox("#state\\.id");			//下拉列表框
	（3）addClear4Combogrid("#type\\.id");			//数据表格下拉框
	（4）addClear4Numberbox("#intNum2");				//数值输入框
	（5）addClear4Datebox("#theDate2");				//日期选择框
	（6）addClear4Datetimebox("#theTime2");			//日期选择框
	注：实现使用了 onChange 事件，如果需要使用该事件执行某些操作，可传入自定义函数，会自动回调 ，参见（1）。
	
	加注：可使用autoAddClear()函数，为各组件自动填加‘清除’功能（组件需要增加 addClear属性 ）。
	
	2017-04-10 ljf
 */

//自动填加清除功能 （组件需要增加 addClear属性 ）
function autoAddClear()
{
	var arr = $("input[addClear]");
	for(var i=0;i<arr.length;i++)
	{
		var oneInput = $(arr[i]);
		var theId = oneInput.attr("id");
		theId = theId.replace('.', '\\.');
		var theClass = oneInput.attr("class");

		if(theClass.indexOf("easyui-textbox") != -1 )
		{//文本框
			addClear4TextBox("#"+theId);
		}
		else if(theClass.indexOf("easyui-combobox") != -1 )
		{//下拉列表框
			addClear4Combobox("#"+theId);
		}
		else if(theClass.indexOf("easyui-combogrid") != -1 )
		{//数据表格下拉框
			addClear4Combogrid("#"+theId);
		}	
		else if(theClass.indexOf("easyui-numberbox") != -1 )
		{//数值输入框
			addClear4Numberbox("#"+theId);
		}	
		else if(theClass.indexOf("easyui-datebox") != -1 )
		{//日期选择框
			addClear4Datebox("#"+theId);
		}	
		else if(theClass.indexOf("easyui-datetimebox") != -1 )
		{//日期选择框
			addClear4Datetimebox("#"+theId);
		}	
		else if(theClass.indexOf("easyui-combotree") != -1 )
		{//树型下拉框
			addClear4ComboTree("#"+theId);
		}
		
		
	}
}

/*
 * 为‘文本框’列表添加‘清除’图标
 * 该实现使用了 onChange 事件，如果用户需要该事件，可传入自定义函数，会自动回调 。
 */
function addClear4TextBox(theId,onChangeFun)
{
	var theObj = $(theId);
	
	//根据当前值，确定是否显示清除图标
	var showIcon = function(){		
		var icon = theObj.textbox('getIcon',0);
		if (theObj.textbox('getValue')){
			icon.css('visibility','visible');
		} else {
			icon.css('visibility','hidden');
		}
	};
	
	theObj.textbox({
		//添加清除图标
		icons:[{
			iconCls:'icon-clear',
			handler: function(e){
				theObj.textbox('clear');
			}
		}],
		
		//值改变时，根据值，确定是否显示清除图标
		onChange:function(){
			if(onChangeFun)
			{
				onChangeFun();
			}
			showIcon();
		}
		
	});	
	
	//根据目前值，确定是否显示清除图标
	showIcon();
}

/*
 * 为‘下拉列表框’添加‘清除’图标
 * 该实现使用了 onChange 事件，如果用户需要该事件，可传入自定义函数，会自动回调 。
 */
function addClear4Combobox(theId,onChangeFun)
{
	var theObj = $(theId);
	
	//根据当前值，确定是否显示清除图标
	var showIcon = function(){		
		var icon = theObj.combobox('getIcon',0);
		if (theObj.combobox('getValue')){
			icon.css('visibility','visible');
		} else {
			icon.css('visibility','hidden');
		}
	};
	
	theObj.combobox({
		//添加清除图标
		icons:[{
			iconCls:'icon-clear',
			handler: function(e){
				theObj.combobox('clear');
			}
		}],
		
		//值改变时，根据值，确定是否显示清除图标
		onChange:function(){
			if(onChangeFun)
			{
				onChangeFun();
			}
			showIcon();
		}
		
	});	
	
	//初始化确认图标显示
	showIcon();
}


/*
 * 为‘数据表格下拉框’添加‘清除’图标
 * 该实现使用了 onChange 事件，如果用户需要该事件，可传入自定义函数，会自动回调 。
 */
function addClear4Combogrid(theId,onChangeFun)
{
	var theObj = $(theId);
	
	//根据当前值，确定是否显示清除图标
	var showIcon = function(){		
		var icon = theObj.combogrid('getIcon',0);
		if (theObj.combogrid('getValue')){
			icon.css('visibility','visible');
		} else {
			icon.css('visibility','hidden');
		}
	};
	
	theObj.combogrid({
		//添加清除图标
		icons:[{
			iconCls:'icon-clear',
			handler: function(e){
				theObj.combogrid('clear');
			}
		}],
		
		//值改变时，根据值，确定是否显示清除图标
		onChange:function(){
			if(onChangeFun)
			{
				onChangeFun();
			}
			showIcon();
		}
		
	});	
	
	//初始化确认图标显示
	showIcon();
}

/*
 * 为‘数值输入框’添加‘清除’图标
 * 该实现使用了 onChange 事件，如果用户需要该事件，可传入自定义函数，会自动回调 。
 */
function addClear4Numberbox(theId,onChangeFun)
{
	var theObj = $(theId);
	
	//根据当前值，确定是否显示清除图标
	var showIcon = function(){		
		var icon = theObj.numberbox('getIcon',0);
		if (theObj.numberbox('getValue')){
			icon.css('visibility','visible');
		} else {
			icon.css('visibility','hidden');
		}
	};
	
	theObj.numberbox({
		//添加清除图标
		icons:[{
			iconCls:'icon-clear',
			handler: function(e){
				theObj.numberbox('clear');
			}
		}],
		
		//值改变时，根据值，确定是否显示清除图标
		onChange:function(){
			if(onChangeFun)
			{
				onChangeFun();
			}
			showIcon();
		}
		
	});	
	
	//初始化确认图标显示
	showIcon();
}

/*
 * 为‘日期选择框’添加‘清除’图标
 * 该实现使用了 onChange 事件，如果用户需要该事件，可传入自定义函数，会自动回调 。
 */
function addClear4Datebox(theId,onChangeFun)
{
	var theObj = $(theId);
	
	//根据当前值，确定是否显示清除图标
	var showIcon = function(){		
		var icon = theObj.datebox('getIcon',0);
		if (theObj.datebox('getValue')){
			icon.css('visibility','visible');
		} else {
			icon.css('visibility','hidden');
		}
	};
	
	theObj.datebox({
		//添加清除图标
		icons:[{
			iconCls:'icon-clear',
			handler: function(e){
				theObj.datebox('clear');
			}
		}],
		
		//值改变时，根据值，确定是否显示清除图标
		onChange:function(){
			if(onChangeFun)
			{
				onChangeFun();
			}
			showIcon();
		}
		
	});	
	
	//初始化确认图标显示
	showIcon();
}



/*
 * 为‘日期时间选择框’添加‘清除’图标
 * 该实现使用了 onChange 事件，如果用户需要该事件，可传入自定义函数，会自动回调 。
 */
function addClear4Datetimebox(theId,onChangeFun)
{
	var theObj = $(theId);
	
	//根据当前值，确定是否显示清除图标
	var showIcon = function(){		
		var icon = theObj.datetimebox('getIcon',0);
		if (theObj.datetimebox('getValue')){
			icon.css('visibility','visible');
		} else {
			icon.css('visibility','hidden');
		}
	};
	
	theObj.datetimebox({
		//添加清除图标
		icons:[{
			iconCls:'icon-clear',
			handler: function(e){
				theObj.datetimebox('clear');
			}
		}],
		
		//值改变时，根据值，确定是否显示清除图标
		onChange:function(){
			if(onChangeFun)
			{
				onChangeFun();
			}
			showIcon();
		}
		
	});	
	
	//初始化确认图标显示
	showIcon();
}


/*
 * 为‘树形下拉框’添加‘清除’图标
 * 该实现使用了 onChange 事件，如果用户需要该事件，可传入自定义函数，会自动回调 。
 */
function addClear4ComboTree(theId,onChangeFun)
{
	var theObj = $(theId);
	
	//根据当前值，确定是否显示清除图标
	var showIcon = function(){		
		var icon = theObj.combotree('getIcon',0);
		if (theObj.datebox('getValue')){
			icon.css('visibility','visible');
		} else {
			icon.css('visibility','hidden');
		}
	};
	
	theObj.combotree({
		//添加清除图标
		icons:[{
			iconCls:'icon-clear',
			handler: function(e){
				theObj.datebox('clear');
			}
		}],
		
		//值改变时，根据值，确定是否显示清除图标
		onChange:function(){
			if(onChangeFun)
			{
				onChangeFun();
			}
			showIcon();
		}
		
	});	
	
	//初始化确认图标显示
	showIcon();
}
//----------------------EasyUI组件添加'清除'按钮及功能End-----------------------------------------------------------  



//----------------------日期时间微调框，格式化函数定义Begin-----------------------------------------------------------
/*
* 日期时间微调框：格式化、解析函数。共计4个函数。
* 主要作用：让微调框去除时间，只显示日期（或年月）。
* 2017-04-10 ljf
*/

//日期微调框：格式化函数
function formatter_ymd(date){
  if (!date){return '';}
  return $.fn.datebox.defaults.formatter.call(this, date);
}
//日期微调框：解析函数
function parser_ymd(s){
  if (!s){return null;}
  return $.fn.datebox.defaults.parser.call(this, s);
}
//年月微调框：格式化函数
function formatter_ym(date){
  if (!date){return '';}
  var y = date.getFullYear();
  var m = date.getMonth() + 1;
  return y + '-' + (m<10?('0'+m):m);
}
//年月微调框：解析函数
function parser_ym(s){
  if (!s){return null;}
  var ss = s.split('-');
  var y = parseInt(ss[0],10);
  var m = parseInt(ss[1],10);
  if (!isNaN(y) && !isNaN(m)){
      return new Date(y,m-1,1);
  } else {
      return new Date();
  }
}
//----------------------日期时间微调框，格式化函数定义End-----------------------------------------------------------

//为页面增加 回车 或 tab键 改变焦点操作
function addChangeFocusOpe()
{
	$(window).keydown(function(event){//按键事件
		if(event.keyCode==13 || event.keyCode==9) //回车 或 tab键
		{
			var tabindex = $($(':focus').parent()[0]).prev().attr("tabindex"); //取（当前焦点--父元素--前一元素）的 tabindex 属性。该结构根据jQuery EasyUI生成的页面结构而定。
			if(tabindex != undefined)
			{
				var nextIndex = parseInt(tabindex) + 1; //下一焦点元素tabindex编号
				var nextInput = $("input[tabindex='"+nextIndex+"']"); //查找下一焦点元素
				if(nextInput.length > 0);
				{
					var nextObj = $(nextInput[0]);
					var options = nextObj.attr("data-options"); //设置的属性值，用于判断是否是“文本区域”
					var focusObj = $(nextInput[0]).next('span').find('input'); //元素--下一span元素 --内部input。该结构根据jQuery EasyUI生成的页面结构而定
					if(options.indexOf("multiline:true") != -1)
					{//要设置焦点的元素是“文本区域”
						focusObj = nextObj.next('span').find('textarea');
					}
					focusObj.focus(); //设置焦点
				}
			}
		}
		if(event.keyCode==9)
		{//对于tab键，则取消其本有功能，因为上面已完成焦点转换
			 return false;
		}
	});
}

